#ifndef HELPERS_H 
#define HELPERS_H

#include <string>
#include <sstream>
#include <iostream>
#include <fstream>
#include <time.h>

using std::exception;
using std::string;
using std::cout;
using std::endl;


typedef unsigned long VERTEX_SIZE;


/*****************************************************************************/
// Logger
// Interface to print messages for the user
/*****************************************************************************/
class Logger
{
public:
	static void LogMessage(string msg);
};


/*****************************************************************************/
// GraphColoringException
// Implements the Graph Coloring Exepetion interface
/*****************************************************************************/
class GraphColoringException : public exception
{
private:
	string m_errorDescription;
	
public:
	GraphColoringException(string description)
	{
		exception::exception();
		m_errorDescription = description;
		Logger::LogMessage("Exception :"+description);
	}

	string GetErrorDescription()
	{
		return m_errorDescription;
	}
};




/*****************************************************************************/
// Debug
// Extra logging for debugging purposes
/*****************************************************************************/
class Debug
{
public:
	static const bool s_DebugOn = true; //turn off when development is finshed

	static void PrintDebugMsg(string msg);
	static void changeDebugStream(bool isStdout);

private:
	static std::ostream m_outStream;
};


/*****************************************************************************/
// General Functions
/*****************************************************************************/
string GetCurrentTime(bool isForFileName);

#endif //HELPERS_H